import { ref, reactive, computed } from 'vue'
import { defineStore } from 'pinia'
import { loginApi } from '../api/modules/user'
import UserLoginDTO from '../models/dto/UserLoginDTO'
import LoginVO from '../models/vo/LoginVO'
import { ElMessage } from 'element-plus'
import router from '../router'

export const useUserStore = defineStore('user', () => {
  // 登录用户信息
  const loginUser = ref(JSON.parse(localStorage.getItem('loginUser')) || null)
  
  // 登录状态
  const isLoggedIn = computed(() => !!loginUser.value && !!loginUser.value.token)
  
  // 用户名
  const username = computed(() => loginUser.value?.username || '')
  
  // 真实姓名
  const realname = computed(() => loginUser.value?.realname || '')
  
  // 用户头像
  const avatar = computed(() => loginUser.value?.avatar || '')
  
  // 登录方法
  const login = async (username, password) => {
    try {
      // 创建登录DTO
      const loginDTO = new UserLoginDTO(username, password)
      
      // 调用登录API
      const result = await loginApi(loginDTO)
      
      // 检查登录结果
      if (result.code === 1 && result.data) {
        // 将登录结果转换为LoginVO对象
        const loginData = new LoginVO(result.data)
        
        // 更新登录用户信息
        loginUser.value = loginData
        
        // 保存到本地存储
        localStorage.setItem('loginUser', JSON.stringify(loginData))
        
        // 显示登录成功消息
        ElMessage.success('登录成功')
        
        // 跳转到仪表盘页面
        router.push('/dashboard')
        
        return true
      } else {
        ElMessage.error(result.msg || '登录失败')
        return false
      }
    } catch (error) {
      console.error('登录出错:', error)
      ElMessage.error('登录失败，请稍后重试')
      return false
    }
  }
  
  // 退出登录方法
  const logout = () => {
    // 清除登录用户信息
    loginUser.value = null
    

    // 清除本地存储
    localStorage.removeItem('loginUser')
    
    // 跳转到登录页
    router.push('/login')
  }
  
  return {
    loginUser,
    isLoggedIn,
    username,
    realname,
    avatar,
    login,
    logout
  }
}) 